Hibernate একটি শক্তিশালী ORM টুল যা ডেটাবেস অপারেশনে পারফরম্যান্স উন্নত করার জন্য ক্যাশিং মেকানিজম সরবরাহ করে। Hibernate এ ক্যাশিং দুটি স্তরে কাজ করে:
Second Level Cache ডেটা সঞ্চালনে একটি শেয়ারযোগ্য ক্যাশ ব্যবস্থাপনা করে যা একাধিক সেশনের জন্য ব্যবহার করা যায়। এটি ডেটাবেসে পুনরাবৃত্তি অপারেশন কমিয়ে অ্যাপ্লিকেশনের পারফরম্যান্স উন্নত করে।
প্রতিস্থাপনযোগ্য ক্যাশ প্রোভাইডার:
Ehcache প্রোভাইডার ব্যবহার করে Second Level Cache কনফিগার করার জন্য Maven ডিপেন্ডেন্সি যোগ করুন:
<dependency>
<groupId>org.hibernate</groupId>
<artifactId>hibernate-ehcache</artifactId>
<version>5.6.15.Final</version>
</dependency>
application.properties
ফাইলে Second Level Cache সক্রিয় করুন:
spring.jpa.properties.hibernate.cache.use_second_level_cache=true
spring.jpa.properties.hibernate.cache.region.factory_class=org.hibernate.cache.jcache.JCacheRegionFactory
spring.jpa.properties.javax.cache.provider=org.ehcache.jsr107.EhcacheCachingProvider
@Cache
অ্যানোটেশন ব্যবহার করে Second Level Cache কনফিগার করা হয়:
import jakarta.persistence.*;
import org.hibernate.annotations.Cache;
import org.hibernate.annotations.CacheConcurrencyStrategy;
@Entity
@Cache(usage = CacheConcurrencyStrategy.READ_WRITE)
@Table(name = "products")
public class Product {
@Id
@GeneratedValue(strategy = GenerationType.IDENTITY)
private Long id;
@Column(name = "name")
private String name;
@Column(name = "price")
private Double price;
// Getters and Setters
}
CacheConcurrencyStrategy Options:
READ_ONLY
: ডেটা শুধুমাত্র পড়ার জন্য।NONSTRICT_READ_WRITE
: অপ্রচলিত ডেটা আপডেট করার অনুমতি।READ_WRITE
: পড়া এবং লেখা উভয়ের জন্য সঠিক সমন্বয়।TRANSACTIONAL
: সম্পূর্ণ ট্রানজ্যাকশনাল কনসিস্টেন্সি।Query Cache একটি অতিরিক্ত ক্যাশিং মেকানিজম যা Hibernate এর HQL বা Criteria API এর জন্য ব্যবহৃত হয়। এটি সেকেন্ড লেভেল ক্যাশের ওপর নির্ভরশীল।
application.properties
ফাইলে Query Cache সক্রিয় করুন:
spring.jpa.properties.hibernate.cache.use_query_cache=true
Query Cache ব্যবহার করতে হলে HQL বা Criteria Query তৈরি করতে হবে এবং সেটি ক্যাশ সক্ষম করতে হবে।
import org.hibernate.Session;
import org.hibernate.query.Query;
import org.springframework.stereotype.Repository;
@Repository
public class ProductRepository {
@Autowired
private Session session;
public List<Product> getCachedProducts() {
Query<Product> query = session.createQuery("from Product", Product.class);
query.setCacheable(true); // Enable query caching
return query.list();
}
}
import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.stereotype.Service;
import java.util.List;
@Service
public class ProductService {
@Autowired
private ProductRepository productRepository;
public List<Product> getProducts() {
return productRepository.getCachedProducts();
}
}
import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.web.bind.annotation.*;
import java.util.List;
@RestController
@RequestMapping("/products")
public class ProductController {
@Autowired
private ProductService productService;
@GetMapping
public List<Product> getAllProducts() {
return productService.getProducts();
}
}
ক্যাশিং প্রকার | সুবিধা |
---|---|
Second Level Cache | ডেটাবেস হিট কমিয়ে দ্রুত ডেটা রিট্রাইভ করে। |
Query Cache | বারবার এক্সিকিউট করা কুয়েরির ফলাফল ক্যাশ করে। |
Hibernate Second Level এবং Query Cache ব্যবহার করে অ্যাপ্লিকেশনের কার্যক্ষমতা এবং পারফরম্যান্স অনেকাংশে বৃদ্ধি করা সম্ভব।
Read more